package br.com.sgmf.web.managedbean;

import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import br.com.sgmf.model.Marca;
import br.com.sgmf.service.MarcaService;

@Component
@ManagedBean
@RequestScoped
public class MarcaBean {

	private static final String MARCA_SALVA_COM_SUCESSO = "Marca salva com sucesso!";
	private static final String MARCA_EXCLUIDA_COM_SUCESSO = "Marca excluída com sucesso!";
	private static final String ERRO_AO_SALVAR_MARCA = "Erro ao salvar Marca";
	private static final String ERRO_AO_EXCLUIR_MARCA = "Erro ao excluir a Marca";

	private Marca marca;

	private List<Marca> marcas;

	@Autowired
	private MarcaService marcaService;

	@PostConstruct
	public void inicializar() {
		marca = new Marca();
		marcas = marcaService.findAll();
	}

	public String salvar() {
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message;

		try {
			marcaService.saveOrUpdate(marca);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					MARCA_SALVA_COM_SUCESSO, null);
			inicializar();
		} catch (Exception e) {
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					ERRO_AO_SALVAR_MARCA, null);
			e.printStackTrace();
		}

		context.addMessage(null, message);
		return null;
	}

	public void novo() {
		marca = new Marca();
	}

	public String editar(Marca marca) {
		this.marca = marca;
		return null;
	}

	public String excluir(Marca marca) {
		FacesContext context = FacesContext.getCurrentInstance();
		FacesMessage message;

		try {
			marcaService.delete(marca);
			message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					MARCA_EXCLUIDA_COM_SUCESSO, null);
			inicializar();
		} catch (Exception e) {
			message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
					ERRO_AO_EXCLUIR_MARCA, null);
			e.printStackTrace();
		}

		context.addMessage(null, message);
		return null;
	}

	public Marca getMarca() {
		return marca;
	}

	public void setMarca(Marca marca) {
		this.marca = marca;
	}

	public List<Marca> getMarcas() {
		return marcas;
	}

	public void setMarcas(List<Marca> marcas) {
		this.marcas = marcas;
	}

	public MarcaService getMarcaService() {
		return marcaService;
	}

	public void setMarcaService(MarcaService marcaService) {
		this.marcaService = marcaService;
	}

}
